跳至主要内容

MQTT

通訊協定 MQTT之淺入


協定?

甚麼叫協定



通訊協定

很多東西通訊共識


角色換一下就知道了


我們來看一下常見的軟體通訊協定

  1. HTTP
  2. WebSocket
  3. MQTT
  4. AMQP
  5. XMPP

還有很多很多哩


HTTP(HyperText Transfer Protocal)

我們先來看看 一個HTTP請求有甚麼東西


看起來有四樣

//Request Header
{
"User-Agent":"Mozilla/5.0"
}
//Request Method
POST
//Request URL
/account
//Request Body
{
username:"FKT",
message:"SECRET MESSAGE"
}

Header 標頭

格式是JSON用來放一些請求的額外資訊

{
"User-Agent":"Mozilla/5.0",
"Accept":"...",
"Age":"..."
}

Method 方法

GET: 讀取
POST: 新增
PUT: 修改
PATCH: 部分資料修改
DELETE: 刪除

URL 路由

請求的住址

GET : "google.com" #讀取google.com

Data 資料

可以是 CSV,XML,JSON,String

{
"username":"B10923057",
"password":"pa55w0rd"
}

MQTT(Message Queue Telemetry Transport)

簡便許多

//MQTT Header 
0101010101
//主題名稱
test
//訊息內容
{
data:{
username:"FKT"
},
_page:{
_next:"https://123.com/10"
}
}

標頭 Header

基本的Header使用二進位表示,整個Header長度2Bytes 每個數字大小是4bits所以有8個數字 而剛提到的HTTP Header可高達8KBs


包含

  1. 訊息類型
  2. 是否副本
  3. 傳輸品質
  4. 是否保留

主題 Topic

算是MQTT系列通訊協定特有的東西 可以想像成Topic就像是你喜歡的Youtuber頻道 主題名稱限制65535個字元



Pub Broker Sub


發布者可以一次發給多個訂閱主題的人 訂閱也可以訂閱許多主題


內容 Data

可以傳送XML,JSON,String,Bin(utf-8編碼)

Topic: /message/FKT

{
"message":"我傳送了訊息"
}

MQTT Features


MQTT主動


MQTT透過Topic廣播

資料來源


QoS 服務品質

Quality of Service 個確保網路品質的機制 確保項目

  • 頻寬
  • 封包遺失率
  • 錯誤
  • 延遲

QoS讓MQTT可以用在頻寬受限的地方

由於QoS機制,可以避免關鍵流量無法使用

代表沒有QoS重要資訊是可能遺失的

延伸閱讀



MQTT ChatRoom Workshop

專案連結 大家可以選擇Fork我的專案再clone自己的Repo

git clone git@github.com:fan9704/TypeScriptMQTT.git
npm install
npm run dev
PORT = 8080 //in .env
http://127.0.0.1:8080/pub2/lobby/HelloWOrld
http://127.0.0.1:8080/pub2/FKT/HelloWOrld